Applications in the X Window System do not have access to information about the buttons and axes of available input devices. As a result, these applications must be manually configured or rely on assumptions of the configuration of the input mechanisms of input devices to provide access to the functionality of the connected input device. For example, an application may know that a connected mouse has three input buttons. The application may assume based on convention that the three buttons are a right button, a middle button and a left button. However, the type and function of each button is not known. If the mouse has a non-conventional configuration of buttons, then the functionality of these buttons cannot be known or correctly mapped onto the functionality of the application. Relying solely on conventions is not a reliable manner in which to interface with a connected device. To gain access to reliable information, the application would have to directly access the low level drivers or the input mechanism data stored in the operating system kernel. Nevertheless, applications are not typically granted access to these types of operating system resources and it is not practical for an application to be able to access all types of low level drivers due to the large and constantly changing number of such drivers. For an application to access a low level driver, the application requires specific information about the composition and function of these drivers. If a device driver is not known to the application, then the application is unable to access the information.